package component

type (
	// FilterInvoker 过滤器调用者，在web路由后，执行过滤器链
	FilterInvoker func(ctx InnerContext) *ServerError
	// Filter 过滤器
	Filter interface {
		FilterId() string                          // 过滤器ID
		DoFilter(next FilterInvoker) FilterInvoker // 执行过滤器
	}
)

var (
	globalFilter = make([]Filter, 0, 16) // "全局过滤器"列表
	targetFilter = make([]Filter, 0, 16) // "可选过滤器"列表
)

// RegisterFilter 注册过滤器
func RegisterFilter(filter Filter) {
	targetFilter = append(targetFilter, filter)
}

// RegisterGlobalFilter 注册全局过滤器
func RegisterGlobalFilter(filter Filter) {
	globalFilter = append(globalFilter, filter)
}

func Filters() []Filter {
	return targetFilter
}
